package cn.bonoon.kernel.support.services;

import java.util.List;

import cn.bonoon.kernel.events.ReadEvent;
import cn.bonoon.kernel.support.ProxyEntityManager;
import cn.bonoon.kernel.support.searcher.Finder;
import cn.bonoon.kernel.support.searcher.ISearcher;

public interface ISearchable extends ProxyEntityManager{
	
	ISearcher getSearcher();
	
	<O> List<O> find(ReadEvent readEvent, Class<O> resultClassType) throws Exception;

	/**
	 * 使用finder对象，可以追加查询条件等操作
	 * @return
	 * @throws Throwable
	 */
	Finder finder() throws Exception;
	Finder finder(Object condition) throws Exception;
	Finder finder(ReadEvent readEvent, Class<?> resultClassType) throws Exception;
	// 不建议使用，应该把 condition 放在 readEvent 里面的 source 字段。
	//@Deprecated
	Finder finder(Object condition, ReadEvent readEvent, Class<?> resultClassType) throws Exception;
	
	/**
	 * 注意：只能用于树形结构，其它情况下将返回空集合
	 * @param rid
	 * @param readEvent
	 * @param resultClassType
	 * @return
	 * @throws Throwable
	 * @deprecated 转移到了finder里
	 */
	<O> List<O> tryLoadChildren(Long rid, ReadEvent readEvent, Class<O> resultClassType) throws Exception;

	/**
	 * <pre>
	 * 返回整个数结构
	 * 注意：只能用于树形结构，其它情况下将返回空集合
	 * </pre>
	 * @param readEvent
	 * @param resultClassType
	 * @return
	 * @throws Throwable
	 * @deprecated 转移到了finder里
	 */
	<O> List<O> tryLoadRoot(ReadEvent readEvent, Class<O> resultClassType) throws Exception;

}
